import { BaseEditor } from './BaseEditor'
import { CellValue } from '../types'

export class TextAreaEditor extends BaseEditor {
  protected textarea: HTMLTextAreaElement | null = null
  
  protected createElement(value: CellValue): HTMLElement {
    const editOptions = this.getEditOptions()
    
    // 创建文本域
    this.textarea = document.createElement('textarea')
    
    // 设置属性
    if (editOptions.placeholder) {
      this.textarea.placeholder = editOptions.placeholder
    }
    
    if (editOptions.required) {
      this.textarea.required = true
    }
    
    if (editOptions.readonly) {
      this.textarea.readOnly = true
    }
    
    if (editOptions.maxLength) {
      this.textarea.maxLength = editOptions.maxLength
    }
    
    // 设置行数
    this.textarea.rows = editOptions.rows || 3
    
    // 设置初始值
    this.setValue(value)
    
    return this.textarea
  }
  
  getValue(): CellValue {
    if (!this.textarea) return null
    return this.textarea.value || null
  }
  
  setValue(value: CellValue): void {
    if (!this.textarea) return
    this.textarea.value = value != null ? String(value) : ''
  }
  
  protected applyCustomStyles(): void {
    if (!this.textarea) return
    
    // 文本域的特殊样式
    this.textarea.style.resize = 'vertical'
    this.textarea.style.minHeight = '60px'
    this.textarea.style.padding = '4px 8px'
    this.textarea.style.lineHeight = '1.5'
  }
  
  protected handleKeyDown(e: KeyboardEvent): void {
    // 在文本域中，Enter 键应该换行，而不是结束编辑
    if (e.key === 'Enter' && !e.shiftKey && !e.ctrlKey && !e.metaKey) {
      // 允许换行
      return
    }
    
    // 使用 Ctrl/Cmd + Enter 来结束编辑
    if (e.key === 'Enter' && (e.ctrlKey || e.metaKey)) {
      e.preventDefault()
      // 触发保存（通过模拟 blur 事件）
      this.textarea?.blur()
    }
    
    // 其他按键使用基类处理
    if (e.key === 'Escape') {
      super.handleKeyDown(e)
    }
  }
} 